package com.example.foodsy.utils;

import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;
import java.util.Date;
@Component
public class TraceCodeUtils {
    private static final String PREFIX = "TSM"; // 固定前缀
    private static final String CHECK_CODES = "0123456789"; // 校验位字符集

    // 生成溯源码
    public String generateSourceId(Integer retaId, String batchId) {
        // 处理零售商ID（4位补0）
        String retaIdStr = String.format("%04d", retaId);
        // 处理进货批号（前6位，不足补0）
        String batchPart = batchId.length() >= 6 ? batchId.substring(0, 6) : 
                           String.format("%-" + 6 + "s", batchId).replace(' ', '0');
        // 处理时间戳（yyMMdd）
        String dateStr = new SimpleDateFormat("yyMMdd").format(new Date());
        // 拼接前缀部分（3+4+6+6=19位）
        String prefixPart = PREFIX + retaIdStr + batchPart + dateStr;
        // 计算校验位
        int checkIndex = Math.abs(prefixPart.hashCode()) % CHECK_CODES.length();
        String checkBit = CHECK_CODES.substring(checkIndex, checkIndex + 1);
        // 最终溯源码（20位）
        return prefixPart + checkBit;
    }

    // 校验溯源码格式（防输入错误）
    public boolean validateSourceId(String sourceId) {
        if (sourceId == null || !sourceId.startsWith(PREFIX) || sourceId.length() != 20) {
            return false;
        }
        String prefixPart = sourceId.substring(0, 19);
        String checkBit = sourceId.substring(19);
        int checkIndex = Math.abs(prefixPart.hashCode()) % CHECK_CODES.length();
        return checkBit.equals(CHECK_CODES.substring(checkIndex, checkIndex + 1));
    }
}